package fachade;

import java.util.Iterator;
import java.util.List;

import modelo.ItemComanda;
import modelo.ItemFactura;
import dao.MesaDAO;

import entity.ComandaBD;
import entity.ItemComandaBD;
import entity.ComandaBD;
import entity.EstadisticaPermanenciaBD;
import entity.FacturaBD;
import entity.ItemComandaBD;
import entity.ItemFacturaBD;
import entity.MesaBD;
import entity.PlatoBD;
import entity.RegistroAtencionBD;
import entity.RestauranteBD;

public class MesasFachade {

	private MesaDAO mesaDAO;

	public MesasFachade() {
		this.mesaDAO = new MesaDAO();
	}

	public List<MesaBD> getMesasByEstado(String estado) {
		return this.mesaDAO.getMesasByEstado(estado);
	}
	
	public List<MesaBD> getMesasOfSector(Integer restaurante,Integer sector) {
		return this.mesaDAO.getMesasOfSector(restaurante,sector);
	}

	public void liberarMesa(MesaBD mesa) {
		this.mesaDAO.liberarMesa(mesa);
	}
	
	public void AbrirMesa(MesaBD mesa, RegistroAtencionBD registro) {
		this.mesaDAO.liberarMesa(mesa);
		this.mesaDAO.RegistrarAtencion(registro);
	}
	
	public void administrarFacturacion(MesaBD mesa, FacturaBD factura,
			EstadisticaPermanenciaBD estadistica) {
		this.mesaDAO.liberarMesa(mesa);
		
//		/*primero grabamos la factura sin los items*/
		List<ItemFacturaBD> items = factura.getItems();
		factura.setItems(null);
		
		Integer numeroFactura =this.mesaDAO.getMaximoNumeroFactura(1);
		if(numeroFactura == null)
			numeroFactura = 0;
		numeroFactura++;
		
		factura.setIdFactura(numeroFactura,1);
//		this.mesaDAO.RegistrarFactura(factura);
		

		
		this.mesaDAO.RegistrarFactura(factura);
		factura.setItems(items);
		for (int i = 0; i < factura.getItems().size(); i++) {
			factura.getItems().get(i).setIdFactura(numeroFactura, i+1);
		}
		
		
		for (Iterator iterator = factura.getItems().iterator(); iterator.hasNext();) {
			ItemFacturaBD itemFacturaBD = (ItemFacturaBD) iterator.next();
			this.mesaDAO.guardar(itemFacturaBD);
		}
		
		this.mesaDAO.RegistrarEstadisticaPermanencia(estadistica);
	}

	public List<MesaBD> getMesas() {
		return this.mesaDAO.getMesas();
	}

	public PlatoBD getPlato(Integer idPlato) {
		return (PlatoBD) this.mesaDAO.buscar("PlatoBD", "idPlato", idPlato);
	}

	public void generarComanda(ComandaBD c) {
		this.mesaDAO.guardar(c);
	}
	
	public void cerrarMesa(MesaBD m) {
		// TODO Auto-generated method stub
		this.mesaDAO.cerrarMesa(m);
		
	}	
	
	public void generarItemComanda(ItemComandaBD itemComandaBD) {
		this.mesaDAO.guardar(itemComandaBD);
	}

	public List<PlatoBD> getPlatos() {
		return this.mesaDAO.getPlatos();
	}	
	
	public Float calcularTotalMesa(MesaBD m){
		Float total = new Float(0);
		for (Iterator iterator = m.getComandas().iterator(); iterator.hasNext();) {
			ComandaBD c = (ComandaBD) iterator.next();
			for (Iterator iterator2 = c.getItemsComanda().iterator(); iterator2
					.hasNext();) {
				ItemComandaBD ic = (ItemComandaBD) iterator2.next();
				total += ic.getCantidad() * ic.getPlato().getPrecio();
			}
		}
	return total;
	}

}
